package com.tedu.mybatis;

import com.tedu.pojo.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMybatis01 {

    //1.读取mybatis的核心配置文件(mybatis-config.xml)
    InputStream in = Resources
            .getResourceAsStream("mybatis-config.xml");
    //2.通过配置信息获取一个SqlSessionFactory工厂对象
    SqlSessionFactory fac =
            new SqlSessionFactoryBuilder().build(in);
    //3.通过工厂获取一个SqlSession对象
    SqlSession session = fac.openSession();

    public TestMybatis01() throws IOException {
    }


    @Test
    public void findAll() throws IOException {

        //4.通过namespace+id找到要执行的sql语句并执行sql语句
        List<Emp> list = session.selectList("EmpMapper.findAll");
        //5.输出结果
        for (Emp e : list) {
            System.out.println(e);
        }
    }

    @Test
    public void testInsert() {
        //执行sql语句, 返回执行结果
        int rows = session.update("EmpMapper.insert");
        //提交事务
        session.commit();
        System.out.println("影响的行数: "+rows);
    }

    @Test
    public void testDelete() {
        //执行sql语句, 返回执行结果
        int rows = session.delete("EmpMapper.delete");
        //提交事务
        session.commit();
        System.out.println("影响行数:"+rows);
    }

    /** 练习3: 修改员工信息, 将赵云的job改为'保镖'，salary改为20000 */
    @Test
    public void testUpdate() {
        //执行sql语句, 返回执行结果
        int rows = session.update("EmpMapper.update");
        //提交事务
        session.commit();
        System.out.println("影响行数:"+rows);
    }

    /** 练习5: 查询emp表中指定id的员工信息 */
    @Test
    public void testFindById() {
        //执行sql语句, 返回执行结果
        Emp emp = session.selectOne( "EmpMapper.findById", 1 );
        System.out.println( emp );
    }

    /** 练习6: 新增员工信息: 张飞 Java开发工程师 15000 */
    @Test
    public void testInsert2() {
        //将要传输的参数封装到map集合中
        //Map map = new HashMap();
        //map.put("name", "张飞");
        //map.put("job", "Java开发工程师");
        //map.put("salary", 15000);
        //也可以将要传输的参数封装到Emp对象中
        Emp emp = new Emp();
        emp.setName("关羽123");
        emp.setJob("保安");
        emp.setSalary(8000.0);
        //执行sql语句
        int rows = session.update("EmpMapper.insert2", emp);
        //提交事务
        session.commit();
        System.out.println( "影响的行数: "+rows );
    }
}
